<?php
/** @name : HTML.php - @author : theerasak.p - @since : 21 �.�. 2554 1:17:47 - @encoding : UTF-8 */

class HTML
{
	private static $instance = array();

	/**
	 * @method ตั้งค่าหรือดึงข้อมูลเพื่อใช้ในการแสดงผลที่หน้า View
	 * @param var = ชื่อตัวแปรที่ต้องการดึงข้อมูลหรือตั้งค่าข้อมูล, (data = หากต้องการตั้งค่าให้ตั้งข้อมูลนั้นเป็น data :: optional)
	 * @return ค่าของตัวแปร หรือ NULL สำหรับการตั้งค่า
	 * @example HTML::instance("username","ko__ok"); หรือ echo HTML::instance("username");
	 */
	public static function instance($var,$data=NULL)
	{
		if($data==NULL)
		{
			return self::$instance[$var];
		}
		else
		{
			self::$instance[$var] = $data;
			return NULL;
		}
	}

	/**
	 * @method ดึงข้อมูลจากการส่งข้อมูลทั้งในรูปแบบ GET และ POST
	 * @param var = ชื่อตัวแปรที่ต้องการดึงข้อมูล, method = รูปแบบที่ต้องการดึง (METHOD_POST,METHOD_GET) โดยค่ามาตรฐานคือ POST
	 * @return ค่าของตัวแปร
	 * @example HTML::get("username",METHOD_POST);
	 */
	public static function get($var,$method="POST")
	{
		if($method=="POST")
		{
			return $_POST[$var];
		}
		else if($method=="GET")
		{
			return $_GET[$var];
		}
		return "";
	}
	
	private function setMapToProperty($object,$value,$property)
	{
		if($object!= NULL && $object->get($property) != "")
		{
			$value = $object->get($property);
		}
		
		return $value;
	}

	/**
	 * @method สร้าง Textbox ขึ้นโดยใช้ Framework ในการ Generate ให้
	 * @param property = ชื่อตัวแปร, value = ค่าเริ่มต้นที่จะใช้แสดงใน textbox, options = ส่วนเสริมเพื่อเพิ่มความสวยงามของ textbox
	 * @return ไม่มี
	 * @see แสดงผลเป็น textbox
	 * @example HTML::text("username","ko__ok","id=username,width=20");
	 */
	public static function text($property,$value=NULL,$options=NULL,$object=NULL)
	{
		$value = self::setMapToProperty($object,$value,$property);
		echo "<input type=\"text\" autocomplete=\"off\" name=\"".$property."\" ".self::options($options)." value=\"".$value."\"/>";
	}

	/**
	 * @method สร้าง Textbox แบบ Password ขึ้นโดยใช้ Framework ในการ Generate ให้
	 * @param property = ชื่อตัวแปร, value = ค่าเริ่มต้นที่จะใช้แสดงใน textbox, options = ส่วนเสริมเพื่อเพิ่มความสวยงามของ textbox
	 * @return ไม่มี
	 * @see แสดงผลเป็น textbox
	 * @example HTML::password("pass","ko__ok","id=username,width=20");
	 */
	public static function password($property,$value=NULL,$options=NULL,$object=NULL)
	{
		$value = self::setMapToProperty($object,$value,$property);
		echo "<input type=\"password\" name=\"".$property."\" ".self::options($options)." value=\"".$value."\"/>";
	}

	/**
	 * @method สร้าง Textarea ขึ้นโดยใช้ Framework ในการ Generate ให้
	 * @param property = ชื่อตัวแปร, value = ค่าเริ่มต้นที่จะใช้แสดงใน textbox, options = ส่วนเสริมเพื่อเพิ่มความสวยงามของ textbox
	 * @return ไม่มี
	 * @see แสดงผลเป็น textarea
	 * @example HTML::textarea("message","love you","id=message,width=200");
	 */
	public static function textarea($property,$value=NULL,$options=NULL,$object=NULL)
	{
		$value = self::setMapToProperty($object,$value,$property);
		echo "<textarea name=\"".$property."\" ".self::options($options).">".$value."</textarea>";
	}

	public static function button($type,$text=NULL,$options=NULL)
	{
		echo "<input type=\"".$type."\" value=\"".$text."\" ".self::options($options).">";
	}
	
	public static function submitAjaxAction($text,$controller,$action,$subdomain,$params)
	{
		echo "<input name=\"123423\" type=\"button\" value=\"".$text."\" onclick=\"submitForm(this);\">";
	}

	public static function select($property,$sqlStd,$value=NULL,$options=NULL,$object=NULL)
	{
		$value = self::setMapToProperty($object,$value,$property);
		
		$database = new DB();
		$resultList = $database->findAllNative("Custom[name+value]",$database->XMLSQL("selectUi",$sqlStd));

		echo "<select name=\"".$property."\">";
		foreach ($resultList as $result)
		{
			echo "<option value=\"".$result['Custom']->get("value")."\" ".($result['Custom']->get("value")==$value?"selected":"").">";
			echo $result['Custom']->get("name");
			echo "</option>";
		}
		echo "</select>";
	}

	/**
	 * @method สร้าง Datepicker ขึ้นโดยใช้ Framework ในการ Generate ให้
	 * @param property = ชื่อตัวแปร, value = ค่าเริ่มต้นที่จะใช้แสดงใน textbox, options = ส่วนเสริมเพื่อเพิ่มความสวยงามของ textbox
	 * @return ไม่มี
	 * @see แสดงผลเป็น textbox
	 * @example HTML::datepicker("startDate","ko__ok","id=username,width=20");
	 */
	public static function datepicker($property,$value=NULL,$options=NULL,$object=NULL)
	{
		$value = self::setMapToProperty($object,$value,$property);
		echo "<input type=\"text\" class=\"datepicker\" name=\"".$property."\" ".self::options($options)." value=\"".$value."\"/>";
	}

	/**
	 * @method สร้าง Timepicker ขึ้นโดยใช้ Framework ในการ Generate ให้
	 * @param property = ชื่อตัวแปร, value = ค่าเริ่มต้นที่จะใช้แสดงใน textbox, options = ส่วนเสริมเพื่อเพิ่มความสวยงามของ textbox
	 * @return ไม่มี
	 * @see แสดงผลเป็น textbox
	 * @example HTML::timepicker("startDate");
	 */
	public static function timepicker($property,$value=NULL,$options=NULL,$object=NULL)
	{
		$value = self::setMapToProperty($object,$value,$property);
		echo "<input type=\"text\" class=\"timepicker\" name=\"".$property."\" ".self::options($options)." value=\"".$value."\"/>";
	}

	/**
	 * @method สร้าง Datetimepicker ขึ้นโดยใช้ Framework ในการ Generate ให้
	 * @param property = ชื่อตัวแปร, value = ค่าเริ่มต้นที่จะใช้แสดงใน textbox, options = ส่วนเสริมเพื่อเพิ่มความสวยงามของ textbox
	 * @return ไม่มี
	 * @see แสดงผลเป็น textbox
	 * @example HTML::datetimepicker("startDateTime");
	 */
	public static function datetimepicker($property,$value=NULL,$options=NULL,$object=NULL)
	{
		$value = self::setMapToProperty($object,$value,$property);
		echo "<input type=\"text\" class=\"datetimepicker\" name=\"".$property."\" ".self::options($options)." value=\"".$value."\"/>";
	}

	public static function checkbox($property,$data,$value=NULL,$options=NULL)
	{

	}

	public static function radio($property,$label,$value, $check,$options=NULL,$object=NULL)
	{
		$select = self::setMapToProperty($object,$value,$property);
		
		
		if($select != NULL && $select==$value)
		{
			$check = true;
		}
		
		echo "<input type=\"radio\" value=\"".$value."\" name=\"".$property."\" ".(($check==true)?"checked=\"checked\"":"").">";
		echo $label;
	}

	public static function options($options)
	{
		$string = "";
		$style = "";

		$options = split(",", $options);

		foreach ($options as $option)
		{
			$option = split("=", $option);

			switch ($option[0])
			{
				case 'id':
					$string .= " id=\"".$option[1]."\"";
					break;
				case 'width':
					$style .= " width:".$option[1]."px;";
					break;
				case 'height':
					$style .= " height:".$option[1]."px;";
					break;
				case 'class':
					$string .= " class=\"".$option[1]."\"";
					break;
				case 'readonly':
					$string .= " readonly=\"readonly\"";
					break;
			}
		}

		return $string." style=\"".$style."\"";
	}

	public static function img($url,$link=NULL,$options=NULL)
	{
		if($link!=NULL && $link!="")
		{
			echo "<a href=\"".$link."\" target=\"_self\">";
		}

		echo "<img src=\"".$url."\" ".self::options($options)." alt=\"\" title=\"\" >";

		if($link!=NULL && $link!="")
		{
			echo "</a>";
		}
	}

	public static function form($controller,$action,$subDomain=NULL,$method="POST",$params=NULL,$withFileupload=false)
	{
		echo "<form action=\"".Util::chainURL($controller,$action,$subDomain,$params)."\" method=\"".$method."\" ".(($withFileupload)?" enctype=\"multipart/form-data\"":"").">";
	}

	public static function formEnd()
	{
		echo "</form>";
	}
	
	public static function textLink($text,$link=NULL)
	{
		if($link!=NULL && $link!="")
		{
			echo "<a href=\"".$link."\" target=\"_self\">";
		}
	
		echo $text;
	
		if($link!=NULL && $link!="")
		{
			echo "</a>";
		}
	}
	
	public static function hidden($property,$value=NULL,$object=NULL)
	{
		$value = self::setMapToProperty($object,$value,$property);
		echo "<input type=\"hidden\" name=\"".$property."\" value=\"".$value."\">";
	}
}
?>